/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package raccoon.suvisa.logica.servicios.manejador.reportes.beans;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
import raccoon.suvisa.logica.servicios.manejador.reportes.*;
import javax.ejb.Stateless;
import raccoon.suvisa.datos.entities.Transaccion;
import raccoon.suvisa.datos.entities.Usuario;
import raccoon.suvisa.datos.entities.Usuarioxcuenta;
import raccoon.suvisa.datos.fachadas.FachadaDatosRemote;
import raccoon.suvisa.logica.servicios.localizadorServicios.LocalizadorDatosLocal;


/**
 *
 * @author Gabriel
 */
@Stateless
public class ReporteBean implements ReporteRemote {

    @EJB
    private LocalizadorDatosLocal data;

    public InformeGenerico getInforme(BigDecimal idUsuario) {
        try {
            FachadaDatosRemote ret = data.getFachadaDatos();
            Usuario usr = ret.getMetodosUsuario().getUsuario(idUsuario);
            if (usr != null) {
                InformeGenerico info = new InformeGenerico();
                info.setCorreoElectronico(usr.getEmail());
                info.setDireccion(usr.getDireccion());
                info.setNombreUsusario(usr.getNombre());
                List<Usuarioxcuenta> lst = ret.getMetodosUsuarioXcuenta().getCuentasXusuario(idUsuario.toBigInteger());
                List<Movimiento> mov_lst = new ArrayList<Movimiento>();
                if (lst != null) {
                    if (!lst.isEmpty()) {
                        Iterator<Usuarioxcuenta> it = lst.iterator();
                        while (it.hasNext()) {
                            BigInteger n = ret.getMetodosCuenta().getCuenta(it.next().getIdCuenta()).getNumeroCuenta();
                            List<Transaccion> tra_lst = ret.getMetodosTransaccion().getTransaccionesPorEntidad(new BigDecimal(n), true, true);
                            Iterator<Transaccion> ite = tra_lst.iterator();
                            while (ite.hasNext()) {
                                Transaccion trs = ite.next();
                                BigDecimal idEntidad = new BigDecimal(ret.getMetodosCuentaXEntidad().getCuentaXentidad(new BigDecimal(trs.getIdCuentad())).getIdEntidad());
                                String nombreEntidad = ret.getMetodosEntidad().getentidad(idEntidad).toString();
                                Movimiento mov_tmp = new Movimiento(trs.getFecha(), trs.getIdTransaccion().toString(), nombreEntidad, Double.toString(trs.getMonto()), trs.getCuotas().toString());
                                mov_lst.add(mov_tmp);
                            }
                        }
                    }
                }
                info.setMovimientos(mov_lst);
                return info;
            }
            ret = null;
        } catch (Exception e) {
            Logger.getLogger(LocalizadorDatosLocal.class.getName()).info("ERROR !! NOOO:".concat(e.getMessage()));
        }
        return null;
    }
}
